﻿//==============================================================================
// BinaryReader 
//------------------------------------------------------------------------------
///**
//  @file       BinaryReader.h
//  @brief      BinaryReader
//  @author     Riki
//*/
//==============================================================================

#pragma once

#include "Interface.h"

namespace LNote
{
namespace Core
{
namespace FileIO
{

//==============================================================================
// ■ BinaryReader
//------------------------------------------------------------------------------
///**
//  @brief
//*/
//==============================================================================
class BinaryReader
{
public:
	BinaryReader( Stream* stream );
	~BinaryReader();

public:

	/// ストリームの現在位置を後ろへ進める
	void seek( int offset );

	/// ストリーム位置の取得
	int getPosition();

	/// ファイル終端に到達しているか
	bool isEOF() const;

	/// 指定バイト数分の読み込み
	int read( void* buffer, int count );

	/// 整数を読み取り、ストリームの現在位置を進める (1, 2, 4のいずれか。リトルエンディアンから)
    lnS32 readInt( int byteCount );

	/// 1バイト整数を読み取り、ストリームの現在位置を1バイト進める (リトルエンディアンから)
    lnS8 readInt8();

	/// 2バイト整数を読み取り、ストリームの現在位置を2バイト進める (リトルエンディアンから)
    lnS16 readInt16();

	/// 4バイト整数を読み取り、ストリームの現在位置を4バイト進める (リトルエンディアンから)
    lnS32 readInt32();

	/// 符号なし整数を読み取り、ストリームの現在位置を進める (1, 2, 4のいずれか。リトルエンディアンから)
    lnU32 readUInt( int byteCount );

	/// 符号なし1バイト整数を読み取り、ストリームの現在位置を1バイト進める (リトルエンディアンから)
    lnU8 readUInt8();

	/// 符号なし2バイト整数を読み取り、ストリームの現在位置を2バイト進める (リトルエンディアンから)
    lnU16 readUInt16();

	/// 符号なし4バイト整数を読み取り、ストリームの現在位置を4バイト進める (リトルエンディアンから)
    lnU32 readUInt32();

	/// 4バイト浮動小数点値を読み取り、ストリームの現在位置を4バイト進める (リトルエンディアンから)
    lnFloat readFloat();

private:
    Stream*   mStream;
};

} // namespace FileIO
} // namespace Core
} // namespace LNote

//==============================================================================
//
//==============================================================================